package com.fan.analysis.module.preprocessing.call.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fan.analysis.module.preprocessing.call.domain.entity.CallRecordInCompleteEntity;
import com.fan.analysis.module.preprocessing.call.domain.vo.CallRecordInCompleteVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;


/**
 * 操作数据库的dao
 *
 * @author fan
 * @date 2021/09/20 12:56
 **/
@Component
@Mapper
public interface CallDao extends BaseMapper<CallRecordInCompleteEntity> {

    /**
     * 获取所有通话记录
     *
     * @return 所有通话记录集合
     */
    List<CallRecordInCompleteVo> listAll();


    /**
     * 获取指定数量的通话记录
     *
     * @param number 指定数量
     * @return 获取指定数量的通话记录
     */
    List<CallRecordInCompleteVo> listByNum(@Param("number") Integer number);

    /**
     * 查询主叫为被叫的通话记录
     *
     * @param calledNum 被叫号码
     * @param startTime 通话开始时间
     * @return 通话记录
     */
    CallRecordInCompleteVo getByCalledNum(@Param("calledNum") String calledNum, @Param("startTime") Date startTime);


    /**
     * 查询被叫为主叫的通话记录
     *
     * @param callingNum 主叫号码
     * @param startTime  通话开始时间
     * @return 通话记录
     */
    CallRecordInCompleteVo getByCallingNum(@Param("callingNum") String callingNum, @Param("startTime") Date startTime);

    // 获取最新通话记录的开始时间

    /**
     * 获取最新通话记录的开始时间
     *
     * @param callingNum 主叫
     * @param calledNum  被叫
     * @return 最新通话记录开始时间
     */
    CallRecordInCompleteVo getMaxStartTimeByCallingNumAndCalledNum(@Param("callingNum") String callingNum, @Param("calledNum") String calledNum);

    /**
     * 获取通话记录的持续时间的平均值
     *
     * @param callingNum 主叫
     * @param calledNum  被叫
     * @return 通话记录的持续时间的平均值
     */
    CallRecordInCompleteVo getMeanLastTimeByCallingNumAndCalledNum(@Param("callingNum") String callingNum, @Param("calledNum") String calledNum);


    /**
     * 获取通话记录的位置的众数
     *
     * @param callingNum 主叫
     * @param calledNum  被叫
     * @return 通话记录的位置的众数
     */
    CallRecordInCompleteVo getModeLocationByCallingNumAndCalledNum(@Param("callingNum") String callingNum, @Param("calledNum") String calledNum);

    /**
     * 获取通话记录的手机型号的众数
     *
     * @param callingNum 主叫
     * @param calledNum  被叫
     * @return 通话记录的手机型号的众数
     */
    CallRecordInCompleteVo getModeMobileTypeByCallingNumAndCalledNum(@Param("callingNum") String callingNum, @Param("calledNum") String calledNum);


    /**
     * 通过id更新补齐的标志
     *
     * @param flag 标志1
     * @param id   通话记录的唯一id
     * @return 更新是否成功
     */
    Integer updateFlag(@Param("flag") Integer flag, @Param("id") Long id);


    /**
     * 通过id更新主叫
     *
     * @param callingNum 主叫
     * @param id         通话记录唯一id
     * @return 更新是否成功
     */
    Integer updateCallingNum(@Param("callingNum") String callingNum, @Param("id") Long id);


    /**
     * 通过id更新被叫
     *
     * @param calledNum 被叫
     * @param id        通话记录唯一id
     * @return 更新是否成功
     */
    Integer updateCalledNum(@Param("calledNum") String calledNum, @Param("id") Long id);


    /**
     * 通过id更新开始时间
     *
     * @param startTime 通话记录开始时间
     * @param id        通话记录唯一id
     * @return 更新是否成功
     */
    Integer updateStartTime(@Param("startTime") Date startTime, @Param("id") Long id);


    /**
     * 通过id更新通话记录持续时间
     *
     * @param lastTime 持续时间
     * @param id       通话记录唯一id
     * @return 更新是否成功
     */
    Integer updateLastTime(@Param("lastTime") String lastTime, @Param("id") Long id);


    /**
     * 通过id更新位置
     *
     * @param userLocation 主叫位置
     * @param id           通话记录唯一id
     * @return 更新是否成功
     */
    Integer updateUserLocation(@Param("userLocation") String userLocation, @Param("id") Long id);


    /**
     * 通过id更新手机型号
     *
     * @param mobileType 手机型号
     * @param id         唯一id
     * @return 更新是否成功
     */
    Integer updateMobileType(@Param("mobileType") String mobileType, @Param("id") Long id);


}
